package AccesoADatos;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import Logica.Entidades.Jugador;
import Logica.Entidades.Partido;
import Logica.Entidades.Puntaje;


public class PuntajeDAO {
	
	public List<List<String>> obtenerPuntaje(int nroFecha, int idJugador){
		List<List<String>> puntajeDto = new ArrayList<List<String>>();
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			String consulta = "SELECT PJF.* FROM JUGADOR J, PUNTAJE_JUGADOR_EN_FECHA PJF WHERE J.ID_JUGADOR = PJF.ID_JUGADOR AND J.ID_JUGADOR = " + idJugador + " AND NRO_FECHA = " + nroFecha;
			
			Statement stmt = conn.createStatement();
            ResultSet rset = stmt.executeQuery(consulta);
			
            puntajeDto = resultSetToString(rset,13);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return puntajeDto;
	}
	
	public List<List<String>> resultSetToString(ResultSet r, int columnas) throws SQLException{
		
		List<List<String>> lista = new ArrayList<List<String>>();
		
		while(r.next()){
			
			List<String> temp = new ArrayList<String>();
			
			for(int i = 1 ; i < columnas ; i++){
				temp.add(r.getString(i));
			}
			lista.add(temp);
		}
		return lista;
	}

	public void guardarDatos(Puntaje p,char tarjeta, int nFecha) {
		
		String consulta = "INSERT INTO PUNTAJE_JUGADOR_EN_FECHA VALUES("+p.getJugador().getId()+","+nFecha+","+p.getCalificacion()+",'"+tarjeta+"',"+p.getEsFigura()+","+p.getGolesRecibidos()+","+p.getGolesEnContra()+","+p.getGolesConvertidos()+","+p.getJugoMasDe20()+","+p.getPenalesConvertidos()+","+p.getPenalesErrados()+","+p.getPenalesAtajados()+")";
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public void actualizarPuntajes(int id, int nFecha, int calificacion,
			int esFigura, int golesRecibidos, int golesEnContra,
			int golesConvertidos, int jugo20, int penalesConvertidos,
			int penalesErrados, int penalesAtajados, char tarjeta) {
		
		String consulta = "UPDATE PUNTAJE_JUGADOR_EN_FECHA SET ";
		if(calificacion != -1)
			consulta = consulta + "CALIFICACION = " + calificacion + ", ";
		if(esFigura != -1)
			consulta = consulta + "ES_FIGURA = " + esFigura + ", ";	
		if(golesRecibidos != -1)
			consulta = consulta + "GOLES_RECIBIDOS = " + golesRecibidos + ", ";
		if(golesEnContra != -1)
			consulta = consulta + "GOLES_EN_CONTRA = " + golesEnContra + ", ";
		if(golesConvertidos != -1)
			consulta = consulta + "GOLES_CONVERTIDOS = " + golesConvertidos + ", ";
		if(penalesErrados != -1)
			consulta = consulta + "PENALES_ERRADOS = " + penalesErrados + ", ";
		if(penalesConvertidos != -1)
			consulta = consulta + "PENALES_CONVERTIDOS = " + penalesConvertidos + ", ";
		if(penalesAtajados != -1)
			consulta = consulta + "PENALES_ATAJADOS = " + penalesAtajados + ", ";
		if(jugo20 != -1)
			consulta = consulta + "JUGO_MAS_DE_20 = " + jugo20 + ", ";
		consulta = consulta + "TARJETA = '"+tarjeta+"' WHERE ID_JUGADOR = " + id + " AND NRO_FECHA = " + nFecha;

		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public void guardarFigura(int nroFecha, int idJugador) {
		
		String consulta = "UPDATE PUNTAJE_JUGADOR_EN_FECHA SET ES_FIGURA = 1 WHERE NRO_FECHA = " + nroFecha + " AND ID_JUGADOR = " + idJugador + "";
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public void quitarFigura(int nroFecha, int idJugador) {
		
		String consulta = "UPDATE PUNTAJE_JUGADOR_EN_FECHA SET ES_FIGURA = 0 WHERE NRO_FECHA = " + nroFecha + " AND ID_JUGADOR = " + idJugador + "";
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
            stmt.executeQuery(consulta);
			
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}

	public void borrarPuntajes(List<Jugador> jugadores, int nroFecha) {
		
		try {
			Connection conn = ConexionOracle.getConexionOracle().getConnection();
			Statement stmt = conn.createStatement();
			for(Jugador j : jugadores){
				String consulta = "DELETE FROM PUNTAJE_JUGADOR_EN_FECHA WHERE ID_JUGADOR = "+j.getId()+" AND NRO_FECHA = "+nroFecha;
				stmt.executeQuery(consulta);
			}
			stmt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
	}
	
}